<?php
/**

 //  The DoYouHaoBaby PHP FrameWork - wedoit
 //  +---------------------------------------------------------------------
 //
 //  “Copyright”
 //  +---------------------------------------------------------------------
 //  | (C) 2010 - 2099 http://doyouhaobaby.net All rights reserved.
 //  | This is not a free software,use is subject to license terms
 //  +---------------------------------------------------------------------
 //
 //  “About This File”
 //  +---------------------------------------------------------------------
 //  | wedoit User模型
 //  +---------------------------------------------------------------------

*/

!defined('DYHB_PATH') && exit;

class UserModel extends Model{

	/**
	 * 返回对象的定义
	 *
	 * @access public
	 * @static
	 * @return array
	 */
	static public function init__(){

		return array(

			/**
			 * 用什么数据表保存对象
			 *
			 * < 数据库表不带前缀 >
			 *
			 * @return string
			 */
			'table_name'=>'user',
			
			/**
			 * 指定数据表记录字段与对象属性之间的映射关系
			 *
			 * < 指示模型中各个属性、关联的设置
			 *	没有在这里指定设置的数据表字段自动成为模型的普通属性。
			 *	例如数据表中有 user_id、user_title 两个字段，而 props 中
			 *	没有指定 user_title 属性的设置，则 user_title 字段成为该模型的 user_title 属性，并且可以读写。>
			 *
			 * @return array
			 */
			'props'=>array(
				// 主键应该是只读，确保领域对象的“不变量”
				'user_id'=>array('readonly'=>true),
				// 可以在此添加其他属性的设置
			),
			
			/**
			 * 拒绝使用 mass-assignment 方式赋值的属性
			 *
			 * < 功能同上，如果上面是白名单的话，那么下面这个就是黑名单。
			 *	这里设置了属性，那么设置后的属性不能通过构造函数来赋值。 >
			 *
			 * @return mixed
			 */
			'attr_protected'=>'user_id',

			/**
			 * 指定更新数据库中的对象时，哪些属性的值不允许由外部提供
			 *
			 * < 同上，只是一个为创建数据对象时，一个为更新数据对象时 >
			 *
			 * @return mixed
			 */
			'update_reject'=>'regname',

			/**
			 * 在保存对象时，会按照下面指定的验证规则进行验证。验证失败会发送错误，我们可以通过系统提供的方法拦截。
			 *
			 * < 除了在保存时自动验证，还可以通过对象的 模型::M()->check() 方法对数组数据进行验证。
			 *	系统提供了50多个验证规则，所有验证规则可以在 DoYouHaoBaby 完全开发手册中 ~handbook\package\check\check.html中全部罗列出来。 >
			 *
			 * < 如果需要添加一个自定义验证，应该写成 >
			 * < 'title'=>array(
			 *
			 *	 array(array(__CLASS__,'checkTitle'),'标题不能为空'),
			 *) >
			 *
			 * < 同时上面的验证规则，可以用基于ThinkPHP的验证规则做到，下面我们将会有实例来做。>
			 *
			 * @return array
			 */
			'check'=>array(
				'regname'=>array(
					array('require','用户名不能为空'),
					array('min_length',5,'用户名不能少于 5 个字符'),
					array('max_length',30,'用户名不能超过 30 个字符'),
					array('alnum','用户名只能由字母和数字组成'),
				),
				'regpassword'=>array(
					array('require','密码不能为空'),
					array('min_length',6,'密码不能少于 6 个字符'),
					array('max_length',32,'密码不能超过 32 个字符'),
				),
			),
		);
	}

	/**
	 * 开启一个查询，查找符合条件的对象或对象集合
	 *
	 * @static
	 * @return DbSelect
	 */
	static function F(){
		$arrArgs=func_get_args();
		return ModelMeta::instance(__CLASS__)->findByArgs($arrArgs);
	}

	/**
	 * 返回当前 Model 类的元数据对象
	 *
	 * @static
	 * @return ModelMeta
	 */
	static function M(){
		return ModelMeta::instance(__CLASS__);
	}

}
